/**
 * @chatset utf-8
 * atearsan/2013-10-25
 *
 * background.js是与浏览器交互的js
 *
 */

/**
 * request监听
 */
chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {
        //alert(request.action);
        // 显示icon文本消息
        if (request.action == 'iconMsg') {
            if (request.blockCount > 0) {
                // 修改插件图标: 提示拦截了多少用户
                // 2015年 2月 2日 星期一 不更改icon, 因为更改icon会让icon变得有锯齿... 很郁闷
                //chrome.browserAction.setIcon({path: "img/ic_logo_osc_green_48.png", tabId: sender.tab.id});
                chrome.browserAction.setBadgeText({text: request.blockCount + "", tabId: sender.tab.id});
                // 默认红色, 我怕强迫症患者一定要消掉那个红色点点. 现在深灰色
                chrome.browserAction.setBadgeBackgroundColor({color: [63, 63, 63, 200], tabId: sender.tab.id});
                //sendResponse({farewell: "goodbye"});
            }
            else {
                //chrome.browserAction.setIcon({path: "img/ic_logo_osc_green_48.png"});
                chrome.browserAction.setBadgeText({text: "", tabId: sender.tab.id});
                //sendResponse({}); // snub them.
            }
        }
    }
);

/**
 * 切换或打开新tab
 * 本函数参考自 http://open.chrome.360.cn/extension_dev/cookies.html
 * @param url
 */
function focusOrCreateTab(url) {
    chrome.windows.getAll({"populate": true}, function (windows) {
        var existing_tab = null;
        for (var i in windows) {
            var tabs = windows[i].tabs;
            for (var j in tabs) {
                var tab = tabs[j];
                if (tab.url == url) {
                    existing_tab = tab;
                    break;
                }
            }
        }
        if (existing_tab) {
            chrome.tabs.update(existing_tab.id, {"selected": true});
        } else {
            chrome.tabs.create({"url": url, "selected": true});
        }
    });
}

// 点击icon的事件
chrome.browserAction.onClicked.addListener(function (tab) {
    // 跳转到个人消息提醒中心
    //var manager_url = chrome.extension.getURL("http://my.oschina.net/atearsan/admin/inbox");
    //focusOrCreateTab("http://my.oschina.net/atearsan/admin/inbox");
    onNotificationOrIconClick();
});

/**
 * 消息检查
 */
function inboxCheck() {
    if (!$uid) { // $uid = 0
        return;
    }

    $.get("http://www.oschina.net/action/api/user_notice", {uid: $uid}, function (data) {
        /*
         返回值字段	类型及范围	说明
         replyCount	int	新评论个数
         msgCount	int	新私信个数
         referCount	int	新@我个数
         replyCount	int	新评论个数

         已登录: {"notice":{"atmeCount":"0","msgCount":"0","reviewCount":"0","newFansCount":"0","newLikeCount":"0"}}
         未登录: {"result":{"errorCode":"0","errorMessage":"用户未登录"}}
         */
        data = $.xml2json(data);
        var dataJSON = JSON.stringify(data);
        // 返回预期外的结果(比如未登录)
        if (data.result) {
            // FIXME
            alert("未读消息检查: " + data);
        }
        // 返回正确结果
        else if (data.notice) {
            // 本次结果和上次获取的通知结果不一样才通知
            chrome.storage.sync.get("osc_inbox_last_notice", function (items) {
                //alert(items.osc_inbox_last_notice === dataJSON);
                //alert(items.osc_inbox_last_notice + "\r\n-\r\n" + dataJSON);
                if (typeof items.osc_inbox_last_notice === 'undefined' || items.osc_inbox_last_notice !== dataJSON) {
                    // 减0 是把String转型为Number
                    var atmeCount = data.notice.atmeCount - 0;              // @信息
                    var msgCount = data.notice.msgCount - 0;                // 未读消息
                    var reviewCount = data.notice.reviewCount - 0;          // 评论
                    var newFansCount = data.notice.newFansCount - 0;        // 新粉丝
                    var newLikeCount = data.notice.newLikeCount - 0;        // ? 投票/赞 ???

                    if (!atmeCount && !msgCount && !reviewCount && !newFansCount && !newLikeCount) {
                        // 没有新消息 do nothing
                    } else {
                        var options = {
                            type: "basic",
                            iconUrl: "img/ic_logo_osc_green_48.png",
                            title: "通知",
                            message: "有新消息了"
                        };
                        chrome.notifications.create("notificationId_new_msg", options, function (notificationId) {
                            //alert(notificationId)
                            chrome.storage.sync.get("osc_inbox_notice_count", function (items2) {
                                var iconCount = 0;
                                if (typeof items2.osc_inbox_notice_count === 'undefined') {
                                    chrome.storage.sync.set({osc_inbox_notice_count: 1});
                                    iconCount = 1;
                                } else {
                                    iconCount = items2.osc_inbox_notice_count - 0 + 1;
                                    chrome.storage.sync.set({osc_inbox_notice_count: iconCount});
                                }
                                chrome.browserAction.setBadgeText({text: iconCount + ""});
                            });
                        });
                        chrome.notifications.onClicked.addListener(function (notificationId) {
                            onNotificationOrIconClick();
                        });
                    }
                }
                chrome.storage.sync.set({osc_inbox_last_notice: dataJSON});
            });
        }

        //alert(JSON.stringify(data));

    });
    //$.get("/action/api/message_list?uid=94055&dataType=json&pageSize=0")
}

/**
 * 初始化定时任务
 * @params delayInMinutes  执行时等待时长(ms)
 * @params periodInMinutes 执行周期间隔(min)
 */
chrome.alarms.create("task_InboxCheck", {delayInMinutes: 2000, periodInMinutes: 5});
chrome.alarms.onAlarm.addListener(function (alarm) {
        if (alarm.name === 'task_InboxCheck') {
            inboxCheck();
            //alert("#inboxCheck");
        }
    }
);

/**
 * 浏览器启动的时候 检测是否有未读消息, 如果有就设置到插件图标上
 */
chrome.storage.sync.get("osc_inbox_notice_count", function (items2) {
    if (items2.osc_inbox_notice_count) {
        chrome.browserAction.setBadgeText({text: items2.osc_inbox_notice_count - 0 + 1 + ""});
    }
});

/**
 * 消息通知或插件栏icon点击事件处理
 */
function onNotificationOrIconClick() {
    // 1. 跳转到消息页面 2. 清除上次的消息通知 3. 清除未读消息计数
    focusOrCreateTab("http://my.oschina.net");
    chrome.storage.sync.remove("osc_inbox_last_notice");
    chrome.storage.sync.remove("osc_inbox_notice_count");
    chrome.browserAction.setBadgeText({text: ""});
}

// ================ 加载的时候执行的js
var $uid = 0;
//alert("#function");
/**
 * 解析uid<br/>
 * 首页有一个提醒列表, 里面的链接是uid的
 */
$.get("http://www.oschina.net", function (data) {
    // <a href="http://www.oschina.net/code/list_by_user?id=94055">我分享的代码</a>
    try {
        //alert($($.parseHTML(data)).find(".control_select").html());
        var href = $($.parseHTML(data)).find(".control_select .code_ > a")[0].href;
        //alert(href + "/" + href.split("=")[1]);
        $uid = href.split("=")[1];
    } catch (err) {
        alert("[OscPlugin] 获取uid失败:"+err+"\n请在osc内通知@atearsan");
    }
});
